package com.pethome.web.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pethome.common.core.domain.AjaxResult;
import com.pethome.pet.domain.Pet;
import com.pethome.pet.mapper.PetMapper;
import com.pethome.pet.service.impl.PetServiceImpl;
import com.pethome.web.domain.Adopt;
import com.pethome.web.domain.vo.AdoptAndPet;
import com.pethome.web.mapper.AdoptMapper;
import com.pethome.web.service.IAdoptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 领养管理Service业务层处理
 * 
 * @author hjc
 * @date 2024-08-26
 */
@Service
public class AdoptServiceImpl extends ServiceImpl<AdoptMapper,Adopt> implements IAdoptService
{
    @Autowired
    private AdoptMapper adoptMapper;
    @Autowired
    private PetMapper petMapper;
    @Autowired
    private PetServiceImpl petService;

    /**
     * 根据状态和顾客查询申请信息
     */
    @Override
    public List<AdoptAndPet> selectByStatus(Long customerId, Long status) {
        //获取审核
        if(status==0){
            return adoptMapper.selectByStatus(customerId);
        }else{
            return adoptMapper.selectByStatus2(customerId);
        }
        }


    /**
     * 查询领养管理
     * 
     * @param adoptId 领养管理主键
     * @return 领养管理
     */
    @Override
    public Adopt selectAdoptByAdoptId(Long adoptId)
    {
        return adoptMapper.selectAdoptByAdoptId(adoptId);
    }

    /**
     * 查询领养管理列表
     * 
     * @param adopt 领养管理
     * @return 领养管理
     */
    @Override
    public List<Adopt> selectAdoptList(Adopt adopt)
    {
        return adoptMapper.selectAdoptList(adopt);
    }

    /**
     * 新增领养管理
     * 
     * @param adopt 领养管理
     * @return 结果
     */
    @Override
    public int insertAdopt(Adopt adopt)
    {
        return this.getBaseMapper().insert(adopt);
    }

    /**
     * 修改领养管理
     * 
     * @param adopt 领养管理
     * @return 结果
     */
    @Override
    public int updateAdopt(Adopt adopt)
    {
        return adoptMapper.updateAdopt(adopt);
    }

    /**
     * 批量删除领养管理
     * 
     * @param adoptIds 需要删除的领养管理主键
     * @return 结果
     */
    @Override
    public int deleteAdoptByAdoptIds(Long[] adoptIds)
    {
        return adoptMapper.deleteAdoptByAdoptIds(adoptIds);
    }

    /**
     * 删除领养管理信息
     * 
     * @param adoptId 领养管理主键
     * @return 结果
     */
    @Override
    public int deleteAdoptByAdoptId(Long adoptId)
    {
        return adoptMapper.deleteAdoptByAdoptId(adoptId);
    }


    //同意领养申请
    @Override
    public AjaxResult agreeAdopt(Long adoptId, Long petId) {
        //修改当前申请的状态
        UpdateWrapper<Adopt> uw = new UpdateWrapper<>();
        uw.set("adopt_status",1);
        uw.eq("adopt_id",adoptId);
        Boolean r1 = this.update(uw);
            //修改当前宠物的状态
            UpdateWrapper<Pet> uw2 = new UpdateWrapper<>();
            uw2.set("pet_status",4);
            uw2.eq("pet_id",petId);
             r1 = petService.update(uw2);
            //修改其他领养申请的状态
                UpdateWrapper<Adopt> uw3 = new UpdateWrapper<>();
                uw3.set("adopt_status",2);
                uw3.set("adopt_response","经过领养条件的比对，该宠物已被其他顾客领养。");
                uw3.eq("adopt_pet_id",petId);
                uw3.eq("adopt_status",0);
                r1 = this.update(uw3);
        return r1==true?AjaxResult.success("审批成功"):AjaxResult.error("审批失败");
    }

    //反对
    @Override
    public AjaxResult disAgreeAdopt(Long adoptId) {
        //修改当前申请的状态
        UpdateWrapper<Adopt> uw = new UpdateWrapper<>();
        uw.set("adopt_status",2);
        uw.eq("adopt_id",adoptId);
        Boolean r1 = this.update(uw);
        return r1==true?AjaxResult.success("审批成功"):AjaxResult.error("审批失败");
    }
    //添加反馈意见
    @Override
    public AjaxResult addText(Long adoptId,String disAgreeText) {
        //添加反馈意见
        UpdateWrapper<Adopt> uw = new UpdateWrapper<>();
        uw.set("adopt_response",disAgreeText);
        uw.eq("adopt_id",adoptId);
        Boolean r1 = this.update(uw);
        return r1==true?AjaxResult.success("审批成功"):AjaxResult.error("审批失败");
    }
}
